//  创建一个枚举类型
// ignore: constant_identifier_names
// ignore_for_file: unused_local_variable, prefer_typing_uninitialized_variables, avoid_print

enum HttpMethod { GET, POST, DELETE }

// 封装一个抽象类  存放基础的请求
abstract class BaseRequest {
  var pathParams;
  var useHttps = true; // 是否使用https 协议
  // 设置域名
  String authority() {
    return 'api.devio.org';
  }

  // 设置请求方法
  HttpMethod httpMethod();
  // 请求路径
  String path();
  // 设置完整的请求url
  String url() {
    Uri uri;
    // 首先获取path
    var pathStr = path();
    // 拼接path参数
    if (pathParams != null) {
      // 判断是否需要添加 /
      if (path().endsWith('/')) {
        pathStr = "${path()}$pathParams";
      } else {
        pathStr = "${path()}/$pathParams";
      }
    }

    // 切换http 或者 https
    if (useHttps) {
      uri = Uri.https(authority(), pathStr, pathParams);
    } else {
      uri = Uri.http(authority(), pathStr, pathParams);
    }
    print('url:${uri.toString()}');

    return uri.toString();
  }

  bool needLogin(); // 

  Map<String,String> params = {};
  // 添加参数
  BaseRequest add(String key , Object value){
    params[key] = value.toString();
    return this;
  }

  // 请求头
  Map<String ,dynamic>header = {};
  BaseRequest addHeader(String key , Object value){
    params[key] = value.toString();
    return this;
  }

}
